home *** CD-ROM | disk | FTP | other *** search
/ MACD 5 / MACD 5.bin / workbench / libs / progargslib.lha / ProgArgs / Examples / Support / debug.h next >
C/C++ Source or Header  |  1995-04-08  |  6KB  |  166 lines

  1.  
  2. void __stdargs kprintf(unsigned char *fmt,...);  // Serial debugging...
  3. void __stdargs dprintf(unsigned char *fmt,...);  // Parallel debugging...
  4.     
  5. /**
  6.  ** Macros for outputing debugging info
  7.  **/
  8.  
  9. #ifndef STDLIB_ONLY
  10.  
  11.     #include "proto/dos.h"
  12.  
  13.     #ifndef bug
  14.     #define bug Printf
  15.     #endif
  16.     
  17.     #ifndef DEBTIME
  18.     #define DEBTIME 0
  19.     #endif
  20.     
  21.     #ifdef DEBUG
  22.     #define D(x) (x); if(DEBTIME>0) Delay(DEBTIME);
  23.     #else
  24.     #define D(x) ;
  25.     #endif
  26.  
  27. #else
  28.  
  29.     #ifndef bug
  30.     #define bug printf
  31.     #endif
  32.     
  33.     #ifndef DEBTIME
  34.     #define DEBTIME 0
  35.     #endif
  36.     
  37.     #ifdef DEBUG
  38.     #define D(x) (x);
  39.     #else
  40.     #define D(x) ;
  41.     #endif
  42.  
  43. #endif
  44.  
  45. /**
  46.  ** Macros for memory allocation debugging
  47.  **/
  48.  
  49. #define TYPE_NORM  0x00000000    /* This is a normal memory allocation */
  50. #define TYPE_VEC   0x00000001    /* This is the 2.0 AllocVec() function */
  51. #define TYPE_MLLC  0x00000002    /* This is the std malloc() function */
  52. #define TYPE_POOL  0x00000003    /* This is the 3.0 CreatePool() function */
  53.  
  54. #define TYPE_SPDSLOW  0x8000000  /* Slower, but more carefull */
  55. #define TYPE_SPDFAST  0x4000000  /* Faster, doesn't check addresses */
  56.  
  57. /* Where to send debugging info. */
  58. extern UBYTE memory_report;
  59. #define REPORT_NONE     0x00
  60. #define REPORT_SERIAL   0x01
  61. #define REPORT_PARALLEL 0x02
  62.  
  63. extern ULONG memory_logfh;
  64. extern UBYTE memory_slow;
  65. extern UBYTE memory_noreq;
  66.  
  67. void * __regargs debug_allocmem(ULONG size,ULONG flags,ULONG id,ULONG type,UBYTE *note);
  68. void __regargs debug_freemem(void *addr,ULONG size,ULONG id,ULONG type,UBYTE *note);
  69. void * __regargs debug_createpool(ULONG flags,ULONG puddle,ULONG thresh,ULONG id,ULONG type,UBYTE *note);
  70. void __regargs debug_deletepool(void *pool,ULONG id,ULONG type,UBYTE *note);
  71. void * __regargs generic_allocmem(ULONG size,ULONG flags,ULONG id,ULONG type,int line,
  72.                                   UBYTE *module);
  73. void __regargs generic_freemem(void *addr,ULONG size,ULONG id,ULONG type,int line,
  74.                                UBYTE *module);
  75. void * __regargs generic_createpool(ULONG flags,ULONG puddle,ULONG thresh,ULONG id,ULONG type,int line,
  76.                                   UBYTE *module);
  77. void __regargs generic_deletepool(void *pool,ULONG id,ULONG type,int line,
  78.                                UBYTE *module);
  79. void __regargs memory_finish(void);
  80. void __regargs memory_finish_key(ULONG id);
  81.  
  82. #ifndef NOSYSFUNC
  83.     #if defined(DEBUG) || defined(CHK_MEMORY)
  84.         #define AllocMem(x,y) generic_allocmem(x,y,0,TYPE_NORM,__LINE__,(UBYTE*)__FILE__)
  85.         #define FreeMem(x,y) generic_freemem(x,y,0,TYPE_NORM,__LINE__,(UBYTE*)__FILE__)
  86.         #define AllocVec(x,y) generic_allocmem(x,y,0,TYPE_VEC,__LINE__,(UBYTE*)__FILE__)
  87.         #define FreeVec(x) generic_freemem(x,0,0,TYPE_VEC,__LINE__,(UBYTE*)__FILE__)
  88.         #define malloc(x) generic_allocmem(x,0,0,TYPE_MLLC,__LINE__,(UBYTE*)__FILE__)
  89.         #define free(x) generic_freemem(x,0,0,TYPE_MLLC,__LINE__,(UBYTE*)__FILE__)
  90.     #endif
  91. #endif
  92.  
  93. #if defined(DEBUG) || defined(CHK_MEMORY)
  94.  
  95.     #define DAllocMem(size,flags,type,note) debug_allocmem(size,flags,0,(type)|TYPE_NORM,note)
  96.     #define DFreeMem(addr,size,type,note) debug_freemem(addr,size,0,(type)|TYPE_NORM,note)
  97.     #define DAllocVec(size,flags,type,note) debug_allocmem(size,flags,0,(type)|TYPE_VEC,note)
  98.     #define DFreeVec(addr,type,note) debug_freemem(addr,0,0,(type)|TYPE_VEC,note)
  99.     #define Dmalloc(size,type,note) debug_allocmem(size,0,0,(type)|TYPE_MLLC,note)
  100.     #define Dfree(addr,type,note) debug_freemem(addr,0,0,(type)|TYPE_MLLC,note)
  101.  
  102.     #define IAllocMem(x,y,id) generic_allocmem(x,y,id,TYPE_NORM,__LINE__,__FILE__)
  103.     #define IFreeMem(x,y,id) generic_freemem(x,y,id,TYPE_NORM,__LINE__,__FILE__)
  104.     #define IAllocVec(x,y,id) generic_allocmem(x,y,id,TYPE_VEC,__LINE__,__FILE__)
  105.     #define IFreeVec(x,id) generic_freemem(x,0,id,TYPE_VEC,__LINE__,__FILE__)
  106.     #define Imalloc(x,id) generic_allocmem(x,0,id,TYPE_MLLC,__LINE__,__FILE__)
  107.     #define Ifree(x,id) generic_freemem(x,0,id,TYPE_MLLC,__LINE__,__FILE__)
  108.  
  109.     #define DFinishMem() memory_finish()
  110.     #define IFinishMem(id) memory_finish_key((ULONG)id)
  111.  
  112. #else
  113.  
  114.     #define DAllocMem(size,flags,type,note) AllocMem(size,flags)
  115.     #define DFreeMem(addr,size,type,note) FreeMem(addr,size)
  116.     #define DAllocVec(size,flags,type,note) AllocVec(size,flags)
  117.     #define DFreeVec(addr,type,note) FreeVec(addr)
  118.     #define Dmalloc(size,type,note) malloc(size)
  119.     #define Dfree(addr,type,note) free(addr)
  120.  
  121.     #define IAllocMem(size,flags,id) AllocMem(size,flags)
  122.     #define IFreeMem(addr,size,id) FreeMem(addr,size)
  123.     #define IAllocVec(size,flags,id) AllocVec(size,flags)
  124.     #define IFreeVec(addr,id) FreeVec(addr)
  125.     #define Imalloc(size,id) malloc(size)
  126.     #define Ifree(addr,id) free(addr)
  127.  
  128.     #define DFinishMem() ;
  129.     #define IFinishMem(id) ;
  130.  
  131. #endif
  132.  
  133. #ifdef DBPRINT
  134.  
  135.         extern void PokeB(BYTE *,BYTE *,BYTE,UBYTE *note);
  136.         extern void PokeUB(UBYTE *,UBYTE *,UBYTE,UBYTE *note);
  137.         extern void PokeW(WORD *,WORD *,WORD,UBYTE *note);
  138.         extern void PokeUW(UWORD *,UWORD *,UWORD,UBYTE *note);
  139.         extern void PokeL(LONG *,LONG *,LONG,UBYTE *note);
  140.         extern void PokeUL(ULONG *,ULONG *,ULONG,UBYTE *note);
  141.  
  142.         extern BYTE PeekB(BYTE *,BYTE *,UBYTE *note);
  143.         extern UBYTE PeekUB(UBYTE *,UBYTE *,UBYTE *note);
  144.         extern WORD PeekW(WORD *,WORD *,UBYTE *note);
  145.         extern UWORD PeekUW(UWORD *,UWORD *,UBYTE *note);
  146.         extern LONG PeekL(LONG *,LONG *,UBYTE *note);
  147.         extern ULONG PeekUL(ULONG *,ULONG *,UBYTE *note);
  148.  
  149. #else
  150.         #define PokeB(s,a,v,n) (*((BYTE *)(a)) = (BYTE)(v))
  151.         #define PokeUB(s,a,v,n) (*((UBYTE *)(a)) = (UBYTE)(v))
  152.         #define PokeW(s,a,v,n) (*((WORD *)(a)) = (WORD)(v))
  153.         #define PokeUW(s,a,v,n) (*((UWORD *)(a)) = (UWORD)(v))
  154.         #define PokeL(s,a,v,n) (*((LONG *)(a)) = (LONG)(v))
  155.         #define PokeUL(s,a,v,n) (*((ULONG *)(a)) = (ULONG)(v))
  156.  
  157.         #define PeekB(s,a,n) (*((BYTE *)(a)))
  158.         #define PeekUB(s,a,n) (*((UBYTE *)(a)))
  159.         #define PeekW(s,a,n) (*((WORD *)(a)))
  160.         #define PeekUW(s,a,n) (*((UWORD *)(a)))
  161.         #define PeekL(s,a,n) (*((LONG *)(a)))
  162.         #define PeekUL(s,a,n) (*((ULONG *)(a)))
  163.  
  164. #endif
  165.  
  166.